public class Test1 {
    public static void main(String[] args) {
        Stu student1 = new Stu();//相当于直接调用了不带参数的构造方法
        //Stu student2 = new Stu("zhangfei","male",99);


        student1.eat();
        student1.show();
    }
}

class Stu {
    // this 本身代表的是当前对象的引用
    public String name;
    public String gender;
    public int age;

    //构造方法无返回值，不能用 void

    //当一个类当中没有任何一个构造方法的时候，java会自动帮你提供一个不带参数的构造方法

    //this(); 调用当前类中的其他构造方法
    //this(); 只能在当前类中的构造方法中使用，不能在随便一个方法中使用
    public Stu(){
        this("CC","famale",12);//只能放在第一横
        System.out.println("不带参数的构造方法");
    }
    //当一个类中只要有了一个构造方法后，就不再自动加不带参数的构造方法了

    //构造方法之间还构成了方法重载，方法名相同，参数列表不同
    //构造方法并不能开辟空间，开辟空间在构造方法前

    //完成对一个对象的构造：
    //1.分配内存
    //2.调用合适的构造方法

    public Stu(String name, String gender, int age){
        this.name = name;
        this.gender = gender;
        this.age = age;
        System.out.println("带有 3 个参数的构造方法");
    }
    //构造方法，是一种特殊的成员方法，方法名和类名相同，在创建对象时，由编译器自动调用，并且在整个对象的生命周期内只能使用一次
    //当调用完构造方法之后，对象已经产生

    //this.调用方法
    //连续调用，调用 eat 方法就会调用与 eat 方法同在一个类中的 show 方法，哪个引用调用了 eat ， this 就代指哪个引用
    //this. 不一定在第一行
    public void eat() {
        System.out.println(this.name + "正在吃饭");
        this.show();
    }

    public void show() {
        System.out.println("姓名："+ this.name + "年龄：" + this.age + "性别：" + this.gender);
    }
}
